using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ImageAnalystTools._ClassificationandPatternRecognition
{
    /// <summary>
    /// <para>Predict Using Regression Model</para>
    /// <para>Predicts data values using the output from the Train Random Trees Regression Model tool.</para>
    /// <para>使用训练随机树回归模型工具的输出预测数据值。</para>
    /// </summary>    
    [DisplayName("Predict Using Regression Model")]
    public class PredictUsingRegressionModel : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public PredictUsingRegressionModel()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_rasters">
        /// <para>Input Rasters</para>
        /// <para>The single-band, multidimensional, or multiband raster datasets, or mosaic datasets containing explanatory variables.</para>
        /// <para>单波段、多维或多波段栅格数据集，或包含解释变量的镶嵌数据集。</para>
        /// </param>
        /// <param name="_in_regression_definition">
        /// <para>Input Regression Definition File</para>
        /// <para>A JSON format file that contains attribute information, statistics, or other information from the regression model. The file has an .ecd extension. The file is the output of the Train Random Trees Regression Model tool.</para>
        /// <para>一个 JSON 格式文件，其中包含回归模型中的属性信息、统计信息或其他信息。该文件的扩展名为 .ecd。该文件是训练随机树回归模型工具的输出。</para>
        /// </param>
        /// <param name="_out_raster_dataset">
        /// <para>Output predicted raster</para>
        /// <para>A raster of the predicted values.</para>
        /// <para>预测值的栅格。</para>
        /// </param>
        public PredictUsingRegressionModel(List<object> _in_rasters, object _in_regression_definition, object _out_raster_dataset)
        {
            this._in_rasters = _in_rasters;
            this._in_regression_definition = _in_regression_definition;
            this._out_raster_dataset = _out_raster_dataset;
        }
        public override string ToolboxName => "Image Analyst Tools";

        public override string ToolName => "Predict Using Regression Model";

        public override string CallName => "ia.PredictUsingRegressionModel";

        public override List<string> AcceptEnvironments => ["cellAlignment", "cellSize", "compression", "extent", "geographicTransformations", "gpuID", "nodata", "outputCoordinateSystem", "parallelProcessingFactor", "processorType", "pyramid", "rasterStatistics", "resamplingMethod", "scratchWorkspace", "snapRaster", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_in_rasters, _in_regression_definition, _out_raster_dataset];

        /// <summary>
        /// <para>Input Rasters</para>
        /// <para>The single-band, multidimensional, or multiband raster datasets, or mosaic datasets containing explanatory variables.</para>
        /// <para>单波段、多维或多波段栅格数据集，或包含解释变量的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Rasters")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_rasters { get; set; }


        /// <summary>
        /// <para>Input Regression Definition File</para>
        /// <para>A JSON format file that contains attribute information, statistics, or other information from the regression model. The file has an .ecd extension. The file is the output of the Train Random Trees Regression Model tool.</para>
        /// <para>一个 JSON 格式文件，其中包含回归模型中的属性信息、统计信息或其他信息。该文件的扩展名为 .ecd。该文件是训练随机树回归模型工具的输出。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Regression Definition File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_regression_definition { get; set; }


        /// <summary>
        /// <para>Output predicted raster</para>
        /// <para>A raster of the predicted values.</para>
        /// <para>预测值的栅格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output predicted raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_raster_dataset { get; set; }


        public PredictUsingRegressionModel SetEnv(object cellSize = null, object compression = null, object extent = null, object geographicTransformations = null, object nodata = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object pyramid = null, object rasterStatistics = null, object resamplingMethod = null, object scratchWorkspace = null, object snapRaster = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(cellSize: cellSize, compression: compression, extent: extent, geographicTransformations: geographicTransformations, nodata: nodata, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, pyramid: pyramid, rasterStatistics: rasterStatistics, resamplingMethod: resamplingMethod, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}